/*
 * Copyright (c) Jan Šlahora (${USER}) - 2011.
 * Created in IntelliJ IDEA 10.5
 */

package text;

import java.util.Arrays;
import java.util.regex.Pattern;

/*
*   File DejPocty 
*   in package text
*   was created by slaha
*   on 27.11.11 at 22:40.
*
*/
public class DejPocty {

   static boolean jeText(String s) {
    return (s != null && !s.isEmpty());
  }

   public static int pocetZnaku(String s) {
    if (jeText(s)) {
      return s.length();
    }
    return 0;
  }
  
   public static int[] pocetSlov(String s) {
    if (!jeText(s)) {
      return new int[]{0, 0};
    }
    String[] a = s.split(" |\n|\r|\r\n");
    int pocet[] = new int[2];
    Arrays.fill(pocet, 0);

    for (String str : a) {
      //.. když je to pouze slovo z písmen (+ končí ošetřeny konce vět)
      if (Pattern.matches("[a-zA-ZěščřžýáíéúůďťňĚŠČŘŽÝÁÉÚŮ]+[\\.:;,!\\?]*$", str)) {
        pocet[0]++;
      }
      //.. když je tam cokoli
      if (Pattern.matches("\\S+", str)) {
        pocet[1]++;
      }
    }
    return pocet;
  }

   public static int pocetVet2(String text) {
    if (!jeText(text)) {
      return 0;
    }

    int pocet = 0;
    int pocatek = 0;
    int konec;
    char[] znaky = {'.', '?', '!', ':'};
    do {
      String v = dejVetu(text.substring(pocatek), znaky);
      konec = pocatek + v.length();

      //.. zbavím se bílých znaků na začátku
      String veta = vymazBileZnaky(v);

      //.. Když je první nebílý znak velké písmeno nebo uvozovka, je to věta
      if (Pattern.matches("^[[0-9][A-Z]ĚŠČŘŽÝÁÍÉÚŮĎŤŇÓ\"]", veta.subSequence(0, 1))) {
        ++pocet;
      }

      //.. ošetřuju, že čísla s . a : nejsou brány jako věty
      if (Pattern.matches("[\\s\\S]*\\d+[\\.:]*$", veta)) {
        String cislo = veta;
        if (konec + 1 <= text.length()) {
          cislo = veta.concat(text.substring(konec, konec + 1));
        }
        if (Pattern.matches("[\\s\\S]*\\d+[\\.:]*\\d+$", cislo)) {
          pocet--;
        }
      }

      pocatek = konec;
    } while ((konec) < text.length() && konec > 0);
    return pocet;
  }

   static String dejVetu(String text, char[] poleZnaku) {
    int konec = prvniVyskyt(text, poleZnaku);
    if (konec < 0) {
      return text;
    }
    return text.substring(0, ++konec);
  }

   static int prvniVyskyt(String text, char[] poleZnaku) {
    Arrays.sort(poleZnaku);
    int min = text.indexOf(poleZnaku[0]);
    for (int i = 1; i < poleZnaku.length; i++) {
      int index = text.indexOf(poleZnaku[i]);
      if (min < 0 && index >= 0) {
        min = index;
      }
      if (index > 0 && index < min) {
        min = index;
      }
    }
    return min;
  }

   static String vymazBileZnaky(String veta) {
    int jxd = 0;
    int jj;
    //najdu první znak

     if (veta.length() == 0) {
       return veta;
     }
    do {
      if (jxd + 1 <= veta.length()) {
        jj = jxd + 1;
      } else {
        break;
      }
      jxd++;
    } while (!Pattern.matches("\\S", veta.subSequence(jxd - 1, jj)));

    return (veta.substring(--jxd));
  }

}
